package fsmsim.kernel;

public class Cinta {

	private String _cinta;
	private int _posicion;
	private FSM _maquina;
	
	public Cinta(FSM maquina, String cadena) {
		_cinta=cadena;
		if(_cinta==null) _cinta="";
		_maquina= maquina;
		_posicion=0;
	}
	public Cinta(Cinta cinta){
		// FIXME : Constructor copia.
	}
	protected void applyRegla( Transicion t ){
		// FIXME : Falta agregar el procesado de la pila.
		if(t.getLecturaCinta()== FSM.SIMB_NULO ) return;
		if( t.getEscrituraCinta()!=FSM.SIMB_COMODIN){
			_cinta=_cinta.substring(0,_posicion)+t.getEscrituraCinta()+_cinta.substring(_posicion+1); 
		}
		if(t.getMovimiento()=='R'){
			_posicion++;
			if(_posicion==_cinta.length()) _cinta+=FSM.SIMB_ESPACIO_BLANCO;
		}else{
			if(_posicion==0){
				_cinta=FSM.SIMB_ESPACIO_BLANCO+_cinta;
			}else{
				_posicion--;
			}
		}
	}
	public String getCadena(int desplazamiento, int largo){
		String r="";
		int np= _posicion-desplazamiento;
		for(int i=0;i<largo;i++,np++){
			if(np<0 || np>=_cinta.length()){
				r+=FSM.SIMB_ESPACIO_BLANCO;
			}else{
				r+=_cinta.charAt(np);
			}
		}
		return r;
	}
	public int getPosicion(){
		return _posicion;
	}
	public char getCaracterCinta(){
		if(_cinta.length()>0)
			return _cinta.charAt(_posicion);
		else 
			return FSM.SIMB_ESPACIO_BLANCO;
	}
	public char getCaracterPila(){
		// FIXME : Falta por implementar la pila
		return FSM.SIMB_NULO;
	}
	
	public Cinta getCopia(){
		return new Cinta(this);
	}
	public boolean isFin(){
		// FIXME : Corregir para la comparacion correcta.
		return false;
	}
	public boolean isInicio(){
		// FIXME : Corregir para la comparacion correcta.
		return false;
	}
	
	public String toString(){
		String r="";
		r= _cinta+"\n";
		String c="";
		for(int i=0;i<_posicion;i++)
			c+=" ";
		c+='^';
		return r+c;
	}
	
	public static void main(String args[]){
		Cinta c=new Cinta(new AFD(),"Hola mundo");
		System.out.println(c.toString());
		System.out.println(c.getCadena(-1, 5)+"." );
		System.out.println("1234567890");
	}
}
